ØVELSE 3

Opgave1

A.
Først findes hvilke IO SYS_LED2 og USER_KEY er forbundet til
USER_KEY er forbundet til IO_26
SYS_LED2 er forbundet til GPIO_186

B.
Derefter findes hvilke GPIO banke IO'erne er forbundet til
USER_KEY er forbundet til GPIO1
SYS_LED2 er forbundet til GPIO6

C.

Se om GPIO_OE værdierne er korrekte så SYS_LED2 er sat til output og USER_KEY er sat til input


SYS_LED2 har adressen 0x49058034 hvor vi ser at den har værdien " 0x f f f f f f f f "
Dette er forkert da vi skal have den 26 bit til at være et 0 så der kommer til at stå " 0x f b f f f f f f " dette vil gøre den til output

USER_KEY har adressen 0x48310034 hvor vi ser at den har værdien " 0x f f f f f f f f "
Dette er det korrekte for at den er et indput.

D.
snapshot2.png

E.
registeret 0x49058034 sættes til værdien 0 x f f f f f f f 7
dette gør at dioden bliver sat til en udgang.
mw.L 0x[adresse] [værdi]

registeret 0x4905803C sættest til 0 x 00000007

dette gør at dioden slukker da dioden er aktiv lav
koden til at skrive til registeret er mw.L 0x[adresse] [værdi]

Opgave 2

A.
Vi skal kompilere U-Boot. For at se hvordan dette gøre se mps.iha.dk

B.
Vi skal skrive et program som kan sætte værdien på GpioDOut efter værdien på GpioOE.
unsigned int gpioDIn;
unsigned int gpioDOut;
unsigned int gpioOE;
volatile unsigned long *GpioDIn_ptr = 0x48310038;
volatile unsigned long *GpioOE_ptr = 0x49058034;
volatile unsigned long *GpioDOut_ptr = 0x4905803c;
 
gpioOE = (unsigned int)(*GpioOE_ptr);
gpioOE &= ~(1<<4);                            // Sætter SYS_LED til at være output.
*GpioOE_ptr = (unsigned long)(gpioOE);
 
while(1)
{
    gpioDIn = (unsigned int)(*GpioDIn_ptr);
 
    if ( gpioDIn & 0x04000000 )                        // Ser om knappens bit er 1
    {
             gpioDOut = (unsigned int)(*GpioDOut_ptr);
             gpioDOut |= (1<<4);                        // Tænder lysdioden
             *GpioDOut_ptr = (unsigned long)(gpioDOut);
        }
    else
    {
             gpioDOut = (unsigned int)(*GpioDOut_ptr);
             gpioDOut &= ~(1<<4);                                               // Slukker lysdioden
             *GpioDOut_ptr = (unsigned long)(gpioDOut);
        }
};

C.
Programmet skal kompileres; se mps.iha.dk

D.
Overføre programmet til U-Boot; se mps.iha.dk

Loader programmet til en adresse på memory ved at skrive:
loady 0x80300000

Efterfølgende køre man programmet ved at skrive:
go 0x80300000